Many sites on the World Wide Web have capacity to handle large numbers of simultaneous users. However, every web site has a finite capacity for a given level of service. When this capacity is exceeded, the web site may operate below the level of service, or may stop operating at all.
If it is desirable to maintain the level of service of a web site, it may be desirable to delay or deny additional users access to the web site when the site is operating at or near capacity. Although the users who are delayed or denied access to the web site may be frustrated that they do not have access, the level of service is maintained for those who have access.
When a conventional site delays access to users, users are granted access to the site when capacity becomes available. Typically, capacity becomes available when a user using the site leaves the site. Shortly after a user leaves the site, another user who happens to attempt to gain entry at that moment is granted access to the site.
There are several problems with this approach. First, it does not operate fairly. Gaining access to such a web site is a chance occurrence. The users who have been waiting the longest do not stand a greater probability of gaining access to such a web site than other users who may gain access on their first attempt.
The second problem is related to the first one. Because users realize that the probability of gaining access to the web site is higher as the number of access attempts they make increases, users will repeatedly attempt to access the site. The repeated access attempts can increase the load on the web server, which may further reduce the capacity of the system, or even bring the system down.
Solutions to this problem have been elusive. One reason that solutions to this problem are elusive is caused by the architecture of conventional web sites. Conventional web sites are made scalable using a “server farm” containing multiple servers. Each server in the server farm handles a subset of the total number of users to the site. These servers operate somewhat independently of one another to build and format web pages and receive information from the users. Although each web server may access a central database to provide some of the information in the web pages they build, much of the work may be handled by each web server independently of the others. This architecture makes it difficult to place users in a conventional queue because a central database would be needed to maintain the queue. If the site can receive a large amount of traffic during peak periods, the additional investment in equipment and software required to implement and manage the central queue can be substantial.
A queue is particularly inefficient for a web site because many users may abandon their attempt to access a web site if they have to wait for access. A place in a conventional queue must be maintained even for users who abandon their attempt at access, or the connection between the web server and the user must be maintained to allow for detection of an abandoned attempt. Either alternative can be an inefficient use of resources.
What is needed is a method and apparatus that can provide access to a web site in a fair manner that does not reward repeated attempts, does not require a queue and adjusts for any rate of abandonment of user attempts.